From a3dd33e63c2c8c51102f223e6efe2e3d3bdcbec1 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Mon, 20 Sep 2021 10:25:03 +0200 Subject: [PATCH] VT-d: PCI segment numbers are up to 16 bits wide We shouldn't silently truncate respective values. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- xen/drivers/passthrough/vtd/iommu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index 859e6ddf62..611c22fd52 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1462,7 +1462,8 @@ static int domain_context_mapping(struct domain *domain, u8 devfn, { const struct acpi_drhd_unit *drhd = acpi_find_matched_drhd_unit(pdev); int ret = 0; - u8 seg = pdev->seg, bus = pdev->bus, secbus; + uint16_t seg = pdev->seg; + uint8_t bus = pdev->bus, secbus; /* * Generally we assume only devices from one node to get assigned to a @@ -1677,7 +1678,8 @@ static int domain_context_unmap(struct domain *domain, u8 devfn, const struct acpi_drhd_unit *drhd = acpi_find_matched_drhd_unit(pdev); struct vtd_iommu *iommu = drhd ? drhd->iommu : NULL; int ret; - u8 seg = pdev->seg, bus = pdev->bus, tmp_bus, tmp_devfn, secbus; + uint16_t seg = pdev->seg; + uint8_t bus = pdev->bus, tmp_bus, tmp_devfn, secbus; bool found; switch ( pdev->type ) -- 2.30.2